//
//  AppDelegate.swift
//  Weibo007
//
//  Created by 闫崇 on 15/12/12.
//  Copyright © 2015年 闫崇. All rights reserved.
//

import UIKit
import AFNetworking

/// 全局变量记录用户账号信息，只加载一次用户账号，后续再获取 token，就不再需要去磁盘加载
/// 执行时机，在需要的时候，才会执行，并不是程序一启动就会执行！
/// 放在 @UIApplicationMain 上面
var sharedUserAccount = userAccount.loadAccount()
//切换跟控制器的通知
let YCSwitchRootViewController = "YCSwitchRootViewController"

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        //打印归档的用户信息
        print(sharedUserAccount)
        
        
        //设置网络指示器
        AFNetworkActivityIndicatorManager.sharedManager().enabled  = true
        //设置网络缓存
        let urlCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
        
        NSURLCache.setSharedURLCache(urlCache)
        
        
       setupAppearance()
        
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window?.backgroundColor = UIColor.whiteColor()
        window?.rootViewController = defauletViewController()
        
        window?.makeKeyAndVisible()
        
        //注册通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootViewController:", name: YCSwitchRootViewController, object: nil)
        
        return true
    }
    
    
    //注销通知   
    //注意  deinit 函数不用加 func 和() 
    //此时注销通知  只是在语境上为了代码的完整性而写  其实在 此AppDelegate类中 因为该类是随着应用的诞生而诞生随着应用的销毁而销毁  所以不用担心通知是否被销毁
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self, name: YCSwitchRootViewController, object: nil)
        
    }
    

    //切换跟控制器
    func switchRootViewController(n:NSNotification){
        //判断发的通知中的 object 是否为 true 如果为 true 就显示 MainTabBarController
        let isMain = n.object as! Bool
        
        window?.rootViewController = isMain ? MainTabBarController() : WelcomeViewController()
        
    }
    
    
    //判断加载的控制器
    private func defauletViewController() ->UIViewController {
        
        //判断用户是否登录
        if sharedUserAccount != nil {
            
            //用户登录 判断是否是现版本
            return isNewUpdate() ? NewFeatureViewController() : WelcomeViewController()
            
        }
        
        return MainTabBarController()
        
    }
    

    
    //检查是否值新版本
    private func isNewUpdate() ->Bool {
        
        //1.获取应用程序的'当前版本'
        let info = NSBundle.mainBundle().infoDictionary
        let currentStr = info!["CFBundleShortVersionString"] as! String
        let currentNum = Double(currentStr)
        print(currentNum)
        //2.获取应用程序'之前的版本',从用户偏好中取
        let userDefaults = NSUserDefaults.standardUserDefaults()
        let sandBoxKey = "sandBoxKey"
        let lastNum = userDefaults.doubleForKey(sandBoxKey)
        print(lastNum)
        
        //3.将'当前版本'写入用户偏好
        userDefaults.setDouble(currentNum!, forKey: sandBoxKey)
        //立即写入
        userDefaults.synchronize()
        return currentNum! > lastNum
    }
    
    
    
    
    
    
    private func setupAppearance(){
        
        // 设置外观，一经设置全局有效，必须早，通常会看到 appDelegate 中存在设置外观的代码
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        
        UITabBar.appearance().tintColor = UIColor.orangeColor()
    
    }
    
    
    
    


}

